<?php

/**
 * @version 1.6
 * @author Misha Klomp
 * @editor Leander Molegraaf
 * 
 * deze file doet:
 * - verbinding maken met DB
 * - de inspectie tabel lezen/schrijven/updaten/deleten
 * 
 * hoe werkt dit:
 * - als je de constuctor aanroept met als input een versie ID dan worden alle atributen gevuld met deze info
 * 
 *     $test = new DbActie(15);
 *     
 *     if(!$test->getActieId()){
 *         echo "Niet gevonden.";
 *     } else {
 *         echo $test->getActieId();
 *     }
 * 
 * overige info:
 * - data (datum) worden verwerkt via timestamp
 * 
 * changelog:
 * 1.6 - Leander Molegraaf - getInspectieDataoverzicht sorteert nu op inspectie_I
 */
require_once FILE_DB_DATABASE;
include_once FILE_DB_CONTROLE;

class DbInspectie extends Database {

    private $inspectie_id;
    private $gebruiker_id;
    private $versie_id;
    private $inspectietype = '';
    private $project = '';
    private $locatie = '';
    private $datum = '';
    private $opmerking = '';
    private $afhandelings_datum = '';
    private $actie_paraaf = '';

    public function __construct($inspectie_id = '') {
        if (DEBUG_LVL & DEBUG_LVL_CLASS) /* echo __FILE__ . __LINE__ .': ' . __CLASS__ .'<BR/>' */
            ;

        parent::__construct();
        // If Observatie id get versie data
        if (!empty($inspectie_id)) {
            $this->inspectie_id = $inspectie_id;
            $this->DbGetInspectieData($inspectie_id);
        } else {
            $this->reset();
        }
    }

    public function save($gebruiker_id, $versie_id, $inspectietype, $project, $locatie, $datum, $opmerking) {

//        var_dump($gebruiker_id);echo '<br />';
//        var_dump($inspectietype);echo '<br />';
//        var_dump($project);echo '<br />';
//        var_dump($locatie);echo '<br />';
//        var_dump($datum);echo '<br />';
//        var_dump($opmerking);echo '<br />';


        $controle = new DbControle();

        //@TODO: onderstaande checks heractiveren en TRUE weghalen
        if (/*$controle->checkString($gebruiker_id, 45, 1) &&
                $controle->checkId($versie_id) &&
                $controle->checkString($project, 45, 1) &&
                $controle->checkString($locatie, 45, 1) &&
                !empty($opmerking) &&
                //$controle->checkId($actie_paraaf)&&
                !empty($inspectietype)*/
        true) {
            if (!$this->dbquery("INSERT INTO inspectie (persoon_registratienummer, versie_id, inspectietype, project, locatie, datum, opmerking) 
                                VALUES ('" . mysql_real_escape_string($gebruiker_id) . "', 
                                        '" . mysql_real_escape_string($versie_id) . "', 
                                        '" . mysql_real_escape_string($inspectietype) . "', 
                                        '" . mysql_real_escape_string($project) . "', 
                                        '" . mysql_real_escape_string($locatie) . "', 
                                        '" . mysql_real_escape_string($datum) . "', 
                                        '" . mysql_real_escape_string($opmerking) . "')")) {
                return FALSE;
            }

            
            //if (DEBUG_LVL & DEBUG_LVL_QUERY)  //echo __FILE__ . ' ' . __LINE__ .': ' .$query . '<br />';
            // Udate class attr

            $this->inspectie_id = mysql_insert_id();
            $this->gebruiker_id = $gebruiker_id;
            $this->versie_id = $versie_id;
            $this->inspectietype = $inspectietype;
            $this->project = $project;
            $this->locatie = $locatie;
            $this->datum = $datum;
            $this->opmerking = $opmerking;

            return TRUE;
        } else {
            return FALSE;
        }
    }

    public function update($gebruiker_id, $versie_id, $inspectietype, $project, $locatie, $datum, $opmerking, $afhandelings_datum, $actie_paraaf) {

        $controle = new DbControle();

        if (/*$controle->checkId($gebruiker_id) &&
                $controle->checkId($versie_id) &&
                $controle->checkString($project, 45, 1) &&
                $controle->checkString($locatie, 45, 1) &&
                !empty($datum) &&
                !empty($opmerking) &&
                !empty($afhandelings_datum) &&
                $controle->checkId($actie_paraaf) &&
                $controle->checkInt($inspectietype, Werkplekinspectie, Gedrachsobservatie)*/true) {

            $query = "UPDATE inspectie SET persoon_registratienummer = " . mysql_real_escape_string($gebruiker_id) . ", versie_id = " . mysql_real_escape_string($versie_id) . ", inspectietype = '" . mysql_real_escape_string($inspectietype) . "', project = '" . mysql_real_escape_string($project) . "', locatie = '" . mysql_real_escape_string($locatie) . "', datum = '" . mysql_real_escape_string($datum) . "', opmerking = '" . mysql_real_escape_string($opmerking) . "', afhandelings_datum = '" . mysql_real_escape_string($afhandelings_datum) . "', actie_paraaf = '" . mysql_real_escape_string($actie_paraaf) . "' WHERE `inspectie_id` =" . mysql_real_escape_string($this->inspectie_id);
            if (!$this->dbquery($query)) {
                return FALSE;
            }

            if (DEBUG_LVL & DEBUG_LVL_QUERY)
                echo __FILE__ . ' ' . __LINE__ . ': ' . $query . '<br />';

            $this->gebruiker_id = $gebruiker_id;
            $this->versie_id = $versie_id;
            $this->inspectietype = $inspectietype;
            $this->project = $project;
            $this->locatie = $locatie;
            $this->datum = $datum;
            $this->opmerking = $opmerking;

            return TRUE;
        }
        else {
            return FALSE;
        }
    }

    public function delete() {
        if (!empty($this->inspectie_id)) {

            $query = "DELETE FROM inspectie WHERE inspectie . inspectie_id = '" . mysql_real_escape_string($this->inspectie_id) . "'  LIMIT 1 ";
            if (!$this->dbquery($query)) {
                return FALSE;
            }

            if (DEBUG_LVL & DEBUG_LVL_QUERY)
                echo __FILE__ . ' ' . __LINE__ . ': ' . $query . '<br />';

            $this->reset();
            return TRUE;
        }
        else {
            return FALSE;
        }
    }

    public function getInspectieId() {

        return $this->inspectie_id;
    }

    public function getGebruikerID() {

        return $this->gebruiker_id;
    }

    public function getVersieId() {

        return $this->versie_id;
    }

    public function getInspectietype() {

        return $this->inspectietype;
    }

    public function getProject() {

        return $this->project;
    }

    public function getLocatie() {

        return $this->locatie;
    }

    public function getDatum() {

        return $this->datum;
    }

    public function getOpmerking() {

        return $this->opmerking;
    }

    public function getAfhandelingsDatum() {

        return $this->afhandelings_datum;
    }

    public function getActieParaaf() {

        return $this->actie_paraaf;
    }

    /**
     * Haalt de gegevens van 1 WPI uit de database + de naam van de uitvoerende
     * @author Leander Molegraaf
     * @param Int $wpi_id ID van de werkplekinspectie
     * @return StringArray gegevens van een WPI
     */
    public function DbGetInspectieData($wpi_id) {

        if ($this->dbquery("SELECT inspectietype, project, locatie, datum, opmerking, afhandelings_datum, actie_paraaf, naam FROM inspectie INNER JOIN persoon ON inspectie.persoon_registratienummer = persoon.gebruikers_id WHERE inspectie.inspectie_id = " . mysql_real_escape_string($wpi_id) . "  LIMIT 1 ")) {
            if ($this->dbNumRows() >= 1) {
                $return = $this->dbFetchAll();
                for($x = 0;$x < count($return);$x++){
                    
                    $exploded = explode("-", $return[$x]['datum']);
                    $return[$x]['datum'] = $exploded[2] . "/" . $exploded[1] . "/" . $exploded[0];
                    if($return[$x]['afhandelings_datum'] != null){
                        $exploded = explode("-", $return[$x]['afhandelings_datum']);
                        $return[$x]['afhandelings_datum'] = $exploded[2] . "/" . $exploded[1] . "/" . $exploded[0];
                    }
                }
                return $return;
            } else {
                $this->reset();
                return FALSE;
            }
        }
    }

    /**
     * Haalt gegevens van alle werkplekinspecties uit de database die gebruikt worden op het WPI overzicht
     * @author Leander Molegraaf
     * @return StringArray selecte gegevens van alle WPI
     */
    public function DbGetInspectieDataOverzicht() {
        if ($this->dbquery("SELECT inspectie_id, datum, project, naam FROM inspectie INNER JOIN persoon ON inspectie.persoon_registratienummer = persoon.gebruikers_id ORDER BY inspectie_id DESC")) {
            if ($this->dbNumRows() >= 1) {
                return $this->dbFetchAll();
            } else {
                $this->reset();
                echo'<script>' . 'alert("Geen inspectie gevonden!")' . '</script>';
                return FALSE;
            }
        }
    }

    private function reset() {

        $this->inspectie_id = '';
        $this->gebruiker_id = '';
        $this->versie_id = '';
        $this->inspectietype = '';
        $this->project = '';
        $this->locatie = '';
        $this->datum = '';
        $this->opmerking = '';
        $this->afhandelings_datum = '';
        $this->actie_paraaf = '';
    }

    public function __destruct() {
        parent::__destruct();
    }

}

class TestDbInspectie {

    public function TestDbInspectie() {
        $test = new DbInspectie;
        $test->save(1, 1, 1, 'Werkplek Inspectie', 'project', 'terneuzen', '2011-06-11', 'tester', '1', '1');

        echo 'inspectie ID: ' . $test->getInspectieId() . '<br />';
        echo 'gebruikers ID: ' . $test->getGebruikerID() . '<br />';
        echo 'versie ID: ' . $test->getVersieId() . '<br />';
        echo 'Inspectie Type: ' . $test->getInspectietype() . '<br />';
        echo 'project: ' . $test->getProject() . '<br />';
        echo 'locatie: ' . $test->getLocatie() . '<br />';
        echo 'datum: ' . $test->getDatum() . '<br />';
        echo 'opmerking: ' . $test->getOpmerking() . '<br />';
        echo 'afhandelings datum: ' . $test->getAfhandelingsDatum() . '<br />';
        echo 'actie paraaf: ' . $test->getActieParaaf() . '<br />';

        $test->update(2, 3, 4, 1, tester, axel, 2011 - 03 - 11, tester12, 2011 - 10 - 29, 1);

        echo 'inspectie ID: ' . $test->getInspectieId() . '<br />';
        echo 'gebruikers ID: ' . $test->getGebruikerID() . '<br />';
        echo 'versie ID: ' . $test->getVersieId() . '<br />';
        echo 'Inspectie Type: ' . $test->getInspectietype() . '<br />';
        echo 'project: ' . $test->getProject() . '<br />';
        echo 'locatie: ' . $test->getLocatie() . '<br />';
        echo 'datum: ' . $test->getDatum() . '<br />';
        echo 'opmerking: ' . $test->getOpmerking() . '<br />';
        echo 'afhandelings datum: ' . $test->getAfhandelingsDatum() . '<br />';
        echo 'actie paraaf: ' . $test->getActieParaaf() . '<br />';

        $test->delete();

        echo 'inspectie ID: ' . $test->getInspectieId() . '<br />';
        echo 'gebruikers ID: ' . $test->getGebruikerID() . '<br />';
        echo 'versie ID: ' . $test->getVersieId() . '<br />';
        echo 'Inspectie Type: ' . $test->getInspectietype() . '<br />';
        echo 'project: ' . $test->getProject() . '<br />';
        echo 'locatie: ' . $test->getLocatie() . '<br />';
        echo 'datum: ' . $test->getDatum() . '<br />';
        echo 'opmerking: ' . $test->getOpmerking() . '<br />';
        echo 'afhandelings datum: ' . $test->getAfhandelingsDatum() . '<br />';
        echo 'actie paraaf: ' . $test->getActieParaaf() . '<br />';
    }

}

?>